public class Main {
    public static void main(String[] args) {
        //异常处理 运行时异常
        //数组下标越界  空指针  类型转换异常  算术异常
        //除了运行时异常（unchecked Exception） 及其子类 其他的都是 受检查的异常 checked Exception

//        try {//try catch叫做捕获异常，需要在catch中处理
//            Object o = new Object();
//            //if(o instanceof Integer) {
//
//                Integer i = (Integer) o;
////            }else{
////                throw new ClassCastException("类型转换失败");//抛出异常，警告下，不在此处处理，可以在别的地方再处理
////            }
//            int a = 1/0;
//        }catch(ClassCastException e){
//            System.out.println("类型转换错了");//当下只是输出一下，但一般情况下可以记录log，或做一些操作
////            Object o = new Integer("123456");
////            Integer i = (Integer)o;
////            System.out.println("但已经修复好了");
//        }catch(ArithmeticException e){
//            System.out.println("除数为0");
//        }catch(Exception e){    //不管出什么异常都可以捕获，不知道会出什么问题就可以直接写这个，但不可写在子类之上如上面的ClassCastException
//            System.out.println("不知道出啥错了");
//        }

        try {
            divide();
            throw new InvalidRadiusException("asfasfa");
        } catch (ArithmeticException e) {
            e.printStackTrace();
        } catch (Exception e){
            e.printStackTrace();
        }finally{//问题没处理完 如写文件时出问题了，但输出文件通道还没有关闭，这个时候比较消耗资源，我们就可以关闭一下，做一个资源的处理
            System.out.println("最终执行的东西");
        }
    }


   public static void divide () throws ArithmeticException{ //声明异常后，可以在调用这个方法的地方捕获异常，可以声明多个异常，声明多少异常，调用的地方就需要处理多少异常
       try {
           int c = 1/0;
       } catch (Exception e) {
           throw new ArithmeticException("除数为0了");
       }
   }
    }

